#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    // 安装崩溃捕获
    qInstallMessageHandler([](QtMsgType type, const QMessageLogContext &context, const QString &msg) {
        if (type == QtFatalMsg) {
            QFile file("crash.log");
            if (file.open(QIODevice::Append | QIODevice::Text)) {
                QTextStream stream(&file);
                stream << QDateTime::currentDateTime().toString()
                       << " [FATAL] " << msg << "\n";
                stream << "Location: " << context.file << ":" << context.line << "\n";
                file.close();
            }
        }
    });
    // 启用高DPI缩放（Qt 5.6+）
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    // 使用高DPI像素比（Qt 5.14+）
    QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
    QApplication a(argc, argv);

    // 设置程序图标（需提供图标文件路径）
    // 这里应该用resource.prc来设置不依赖于路径的图标 added by XYH@20250802
    a.setWindowIcon(QIcon(":icons/icon.png"));

    // 这里的初始化太粗暴，不能假设config.ini与可执行文件在相同路径下。
    // 下面的代码里,如果找不到config.ini,就创建一个临时变量settings,但这个变量的生存周期仅仅是在下面的花括号里,
    // 其中存储的信息并没有传递到程序的其他模块!
    // if(!QFile::exists("config.ini")) {
    if(!QFile::exists("qmcc_ics_config.ini")) {
        QSettings settings("qmcc_ics_config.ini", QSettings::IniFormat);
        settings.setValue("Network/CameraIP", "10.201.11.191");
        settings.setValue("Network/CameraPort", 10001);
        // ... set other defaults
        settings.sync();
    }

    try {
        MainWindow w;
        w.show();
        return a.exec();
    } catch (const std::exception& e) {
        QFile crashLog("crash_report.log"); // 这里粗暴默认了崩溃日志的路径就是在程序可执行文件所在目录,不合理!
        if (crashLog.open(QIODevice::WriteOnly | QIODevice::Append)) {
            QTextStream stream(&crashLog);
            stream << QDateTime::currentDateTime().toString() << "\n";
            stream << "CRASH: " << e.what() << "\n\n";
        }
        return -1;
    }
}
